React StrictMode๊ฐ ๊ฐ๋ฐ, ๋๋ฒ๊น , ์ฑ๋ฅ์ ๋ฏธ์น๋ ํจ๊ณผ๋ฅผ ์ฌ์ธต ๋ถ์ํ์ฌ ๋ ๊นจ๋ํ๊ณ ์ ๋ขฐํ ์ ์๋ ์ฝ๋๋ฅผ ๋ณด์ฅํ๋ ๋ฐฉ๋ฒ์ ์์๋ด ๋๋ค.
React StrictMode ํจ๊ณผ: ๊ฒฌ๊ณ ํ ๊ฐ๋ฐ ํ๊ฒฝ ๋ณด์ฅ
ํ๋ ์น ๊ฐ๋ฐ์ ์ธ๊ณ์์ ๊ฒฌ๊ณ ํ๊ณ ์ ์ง๋ณด์ ๊ฐ๋ฅํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋๋ ๊ฒ์ ๊ฐ์ฅ ์ค์ํฉ๋๋ค. ์ฌ์ฉ์ ์ธํฐํ์ด์ค ๊ตฌ์ถ์ ์ํ ์ธ๊ธฐ ์๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ React๋ ๊ฐ๋ฐ์๋ค์ด ์ด๋ฌํ ๋ชฉํ๋ฅผ ๋ฌ์ฑํ๋๋ก ๋๋ ๊ฐ๋ ฅํ ๋๊ตฌ์ธ StrictMode๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด ๊ธ์์๋ React์ StrictMode์ ๋ํด ํฌ๊ด์ ์ผ๋ก ํ๊ตฌํ๋ฉฐ, ์ด๊ฒ์ด ๊ฐ๋ฐ ํ๊ฒฝ์ ๋ฏธ์น๋ ์ํฅ, ์ด์ , ๊ทธ๋ฆฌ๊ณ ๋ ๊นจ๋ํ๊ณ ์ ๋ขฐํ ์ ์๋ ์ฝ๋๋ฅผ ๊ตฌ์ถํ๋ ๋ฐ ์ด๋ป๊ฒ ๊ธฐ์ฌํ๋์ง์ ์ด์ ์ ๋ง์ถฅ๋๋ค.
React StrictMode๋ ๋ฌด์์ธ๊ฐ?
StrictMode๋ React์ ์๋์ ์ธ ๊ฐ๋ฐ ๋ชจ๋์
๋๋ค. ์ด๊ฒ์ ๋์ ๋ณด์ด๋ UI๋ฅผ ๋ ๋๋งํ์ง ์์ผ๋ฉฐ, ๋์ ์ ํ๋ฆฌ์ผ์ด์
๋ด์์ ์ถ๊ฐ์ ์ธ ๊ฒ์ฌ์ ๊ฒฝ๊ณ ๋ฅผ ํ์ฑํํฉ๋๋ค. ์ด๋ฌํ ๊ฒ์ฌ๋ ๊ฐ๋ฐ ๊ณผ์ ์ด๊ธฐ์ ์ ์ฌ์ ์ธ ๋ฌธ์ ๋ฅผ ์๋ณํ๋ ๋ฐ ๋์์ ์ฃผ์ด, ๋ ์์ ์ ์ด๊ณ ์์ธก ๊ฐ๋ฅํ ์ต์ข
์ ํ์ผ๋ก ์ด์ด์ง๋๋ค. <React.StrictMode>
์ปดํฌ๋ํธ๋ก ์ปดํฌ๋ํธ ํ์ ํธ๋ฆฌ๋ฅผ ๊ฐ์ธ ํ์ฑํํ ์ ์์ต๋๋ค.
๋ง์น ์ผ๋ฐ์ ์ธ ์ค์, ์ฌ์ฉ์ด ์ค๋จ๋ ๊ธฐ๋ฅ, ์ ์ฌ์ ์ธ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์ฐพ๊ธฐ ์ํด ๋์์์ด ์ฝ๋๋ฅผ ๊ฒ์ฌํ๋ ๋ถ์ง๋ฐํ ์ฝ๋ ๋ฆฌ๋ทฐ์ด๋ผ๊ณ ์๊ฐํ ์ ์์ต๋๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ค์ ์กฐ๊ธฐ์ ๋ฐ๊ฒฌํจ์ผ๋ก์จ StrictMode๋ ํ๋ก๋์ ํ๊ฒฝ์์ ์๊ธฐ์น ์์ ๋์์ด ๋ฐ์ํ ์ํ์ ํฌ๊ฒ ์ค์ฌ์ค๋๋ค.
StrictMode๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ ๋ฌด์์ธ๊ฐ?
StrictMode๋ React ๊ฐ๋ฐ์์๊ฒ ๋ค์๊ณผ ๊ฐ์ ๋ช ๊ฐ์ง ์ฃผ์ ์ด์ ์ ์ ๊ณตํฉ๋๋ค:
- ๋ฌธ์ ์ ์กฐ๊ธฐ ๋ฐ๊ฒฌ: StrictMode๋ ์ ์ฌ์ ์ธ ๋ฌธ์ ๋ค์ด ํ๋ก๋์ ์์ ๋ฒ๊ทธ๋ก ๋ํ๋๊ธฐ ์ ์ ๊ฐ์กฐ ํ์ํฉ๋๋ค. ์ด๋ฌํ ์กฐ๊ธฐ ๋ฐ๊ฒฌ์ ๊ท์คํ ์๊ฐ๊ณผ ์์์ ์ ์ฝํด ์ค๋๋ค.
- ๋ชจ๋ฒ ์ฌ๋ก ๊ฐ์ : ๊ฐ๋ฐ์๋ค์ด React์ ๊ถ์ฅ ํจํด๊ณผ ๊ดํ์ ๋ฐ๋ฅด๋๋ก ์ฅ๋ คํ์ฌ ๋ ๊นจ๋ํ๊ณ ์ ์ง๋ณด์ํ๊ธฐ ์ฌ์ด ์ฝ๋๋ฅผ ์์ฑํ๊ฒ ํฉ๋๋ค.
- ์ฌ์ฉ ์ค๋จ๋ ๊ธฐ๋ฅ ์๋ณ: StrictMode๋ ์ฌ์ฉ ์ค๋จ๋ ๊ธฐ๋ฅ์ ์ฌ์ฉ์ ๋ํด ๊ฒฝ๊ณ ํ์ฌ ๊ฐ๋ฐ์๋ค์ด ๋ ์๋กญ๊ณ ์ง์๋๋ API๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๋๋ก ์ ๋ํฉ๋๋ค.
- ์ฝ๋ ํ์ง ํฅ์: StrictMode๊ฐ ์๋ณํ ๋ฌธ์ ๋ค์ ํด๊ฒฐํจ์ผ๋ก์จ ๊ฐ๋ฐ์๋ค์ React ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๋ฐ์ ์ธ ํ์ง๊ณผ ์ ๋ขฐ์ฑ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ต๋๋ค.
- ์๊ธฐ์น ์์ ๋ถ์ ํจ๊ณผ ๋ฐฉ์ง: ์ปดํฌ๋ํธ์์ ์ฐ๋ฐ์ ์ธ ๋ถ์ ํจ๊ณผ๋ฅผ ์๋ณํ๊ณ ๋ฐฉ์งํ๋ ๋ฐ ๋์์ ์ฃผ์ด ๋ ์์ธก ๊ฐ๋ฅํ๊ณ ๊ด๋ฆฌํ๊ธฐ ์ฌ์ด ์ ํ๋ฆฌ์ผ์ด์ ์ํ๋ก ์ด์ด์ง๋๋ค.
StrictMode์ ๊ฒ์ฌ์ ๊ฒฝ๊ณ
StrictMode๋ ๋ค์ํ ๊ฒ์ฌ๋ฅผ ์ํํ๊ณ ์ ์ฌ์ ์ธ ๋ฌธ์ ๋ฅผ ๊ฐ์งํ์ ๋ ์ฝ์์ ๊ฒฝ๊ณ ๋ฅผ ๋ณด๋ ๋๋ค. ์ด๋ฌํ ๊ฒ์ฌ๋ ๋์ฒด๋ก ๋ค์๊ณผ ๊ฐ์ด ๋ถ๋ฅํ ์ ์์ต๋๋ค:
1. ์์ ํ์ง ์์ ์๋ช ์ฃผ๊ธฐ ๋ฉ์๋ ์๋ณ
React์ ํน์ ์๋ช ์ฃผ๊ธฐ ๋ฉ์๋๋ ๋์์ฑ ๋ ๋๋ง์ ์์ ํ์ง ์์ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋ฉ๋๋ค. ์ด๋ฌํ ๋ฉ์๋๋ค์ ๋น๋๊ธฐ ๋๋ ๋์์ฑ ํ๊ฒฝ์์ ์ฌ์ฉ๋ ๋ ์๊ธฐ์น ์์ ๋์๊ณผ ๋ฐ์ดํฐ ๋ถ์ผ์น๋ฅผ ์ด๋ํ ์ ์์ต๋๋ค. StrictMode๋ ์ด๋ฌํ ์์ ํ์ง ์์ ์๋ช ์ฃผ๊ธฐ ๋ฉ์๋์ ์ฌ์ฉ์ ์๋ณํ๊ณ ๊ฒฝ๊ณ ๋ฅผ ๋ณด๋ ๋๋ค.
ํนํ, StrictMode๋ ๋ค์ ์๋ช ์ฃผ๊ธฐ ๋ฉ์๋์ ํ๋๊ทธ๋ฅผ ์ง์ ํฉ๋๋ค:
componentWillMount
componentWillReceiveProps
componentWillUpdate
์์:
class MyComponent extends React.Component {
componentWillMount() {
// ์์ ํ์ง ์์ ์๋ช
์ฃผ๊ธฐ ๋ฉ์๋
console.log('์ด๊ฒ์ ์์ ํ์ง ์์ ์๋ช
์ฃผ๊ธฐ ๋ฉ์๋์
๋๋ค!');
}
render() {
return <div>My Component</div>;
}
}
<React.StrictMode>
<MyComponent />
</React.StrictMode>
์ด ์์์์ StrictMode๋ ์ฝ์์ componentWillMount
๊ฐ ์์ ํ์ง ์์ ์๋ช
์ฃผ๊ธฐ ๋ฉ์๋์ด๋ฏ๋ก ํผํด์ผ ํ๋ค๋ ๊ฒฝ๊ณ ๋ฅผ ๋ณด๋ผ ๊ฒ์
๋๋ค. React๋ ์ด๋ฌํ ๋ฉ์๋ ๋ด์ ๋ก์ง์ constructor
, static getDerivedStateFromProps
, ๋๋ componentDidUpdate
์ ๊ฐ์ ๋ ์์ ํ ๋์์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์
ํ ๊ฒ์ ์ ์ํฉ๋๋ค.
2. ๋ ๊ฑฐ์ ๋ฌธ์์ด ref์ ๋ํ ๊ฒฝ๊ณ
๋ ๊ฑฐ์ ๋ฌธ์์ด ref๋ React์์ DOM ๋ ธ๋์ ์ ๊ทผํ๋ ์ค๋๋ ๋ฐฉ์์ ๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ ์ ์ฌ์ ์ธ ์ฑ๋ฅ ๋ฌธ์ ์ ํน์ ์๋๋ฆฌ์ค์์์ ๋ชจํธ์ฑ ๋ฑ ๋ช ๊ฐ์ง ๋จ์ ์ด ์์ต๋๋ค. StrictMode๋ ๋ ๊ฑฐ์ ๋ฌธ์์ด ref์ ์ฌ์ฉ์ ๊ถ์ฅํ์ง ์์ผ๋ฉฐ ๋์ ์ฝ๋ฐฑ ref๋ฅผ ์ฌ์ฉํ๋๋ก ์ฅ๋ คํฉ๋๋ค.
์์:
class MyComponent extends React.Component {
componentDidMount() {
// ๋ ๊ฑฐ์ ๋ฌธ์์ด ref
console.log(this.refs.myInput);
}
render() {
return <input type="text" ref="myInput" />;
}
}
<React.StrictMode>
<MyComponent />
</React.StrictMode>
StrictMode๋ ์ฝ์์ ๊ฒฝ๊ณ ๋ฅผ ๋ณด๋ด ์ฝ๋ฐฑ ref๋ React.createRef
๋ฅผ ๋์ ์ฌ์ฉํ ๊ฒ์ ์กฐ์ธํ ๊ฒ์
๋๋ค. ์ฝ๋ฐฑ ref๋ ๋ ๋ง์ ์ ์ด์ ์ ์ฐ์ฑ์ ์ ๊ณตํ๋ฉฐ, React.createRef
๋ ๋ง์ ์ฌ์ฉ ์ฌ๋ก์ ๋ํด ๋ ๊ฐ๋จํ ๋์์ ์ ๊ณตํฉ๋๋ค.
3. ๋ ๋๋ง ์ค ๋ถ์ ํจ๊ณผ์ ๋ํ ๊ฒฝ๊ณ
React์ render
๋ฉ์๋๋ ์์ํด์ผ ํฉ๋๋ค. ์ฆ, ํ์ฌ props์ state๋ฅผ ๊ธฐ๋ฐ์ผ๋ก UI๋ง ๊ณ์ฐํด์ผ ํฉ๋๋ค. render
๋ฉ์๋ ๋ด์์ DOM์ ์์ ํ๊ฑฐ๋ API๋ฅผ ํธ์ถํ๋ ๊ฒ๊ณผ ๊ฐ์ ๋ถ์ ํจ๊ณผ๋ฅผ ์ํํ๋ฉด ์์ธกํ ์ ์๋ ๋์๊ณผ ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์ ์์ต๋๋ค. StrictMode๋ ์ด๋ฌํ ๋ถ์ ํจ๊ณผ๋ฅผ ์๋ณํ๊ณ ๋ฐฉ์งํ๋ ๋ฐ ๋์์ ์ค๋๋ค.
์ด๋ฅผ ์ํด StrictMode๋ ์๋์ ์ผ๋ก ํน์ ํจ์๋ฅผ ๋ ๋ฒ ํธ์ถํฉ๋๋ค. ์ด ์ด์ค ํธ์ถ์ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก๋ ๋์ ๋์ง ์์ ์ ์๋ ์๋ํ์ง ์์ ๋ถ์ ํจ๊ณผ๋ฅผ ๋๋ฌ๋ ๋๋ค. ์ด๋ ํนํ ์ปค์คํ ํ ์ ๋ฌธ์ ๋ฅผ ์๋ณํ๋ ๋ฐ ์ ์ฉํฉ๋๋ค.
์์:
function MyComponent(props) {
const [count, setCount] = React.useState(0);
// ๋ ๋๋ง ์ค ๋ถ์ ํจ๊ณผ (์ํฐํจํด)
console.log('MyComponent ๋ ๋๋ง ์ค');
setCount(count + 1);
return <div>Count: {count}</div>;
}
<React.StrictMode>
<MyComponent />
</React.StrictMode>
์ด ์์์์ setCount
ํจ์๋ ๋ ๋ ํจ์ ๋ด์์ ํธ์ถ๋์ด ๋ถ์ ํจ๊ณผ๋ฅผ ๋ง๋ญ๋๋ค. StrictMode๋ MyComponent
ํจ์๋ฅผ ๋ ๋ฒ ํธ์ถํ์ฌ setCount
ํจ์๋ ๋ ๋ฒ ํธ์ถ๋๊ฒ ํฉ๋๋ค. ์ด๋ ๋ฌดํ ๋ฃจํ์ ์ฝ์์ ์ต๋ ์
๋ฐ์ดํธ ๊น์ด๋ฅผ ์ด๊ณผํ๋ค๋ ๊ฒฝ๊ณ ๋ฅผ ๋ฐ์์ํฌ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค. ํด๊ฒฐ์ฑ
์ ๋ถ์ ํจ๊ณผ(setCount
ํธ์ถ)๋ฅผ useEffect
ํ
์ผ๋ก ์ฎ๊ธฐ๋ ๊ฒ์
๋๋ค.
4. findDOMNode๋ก DOM ๋ ธ๋ ์ฐพ๊ธฐ์ ๋ํ ๊ฒฝ๊ณ
findDOMNode
๋ฉ์๋๋ React ์ปดํฌ๋ํธ์ ๊ธฐ๋ณธ DOM ๋
ธ๋์ ์ ๊ทผํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ์ด ๋ฉ์๋๋ ์ฌ์ฉ์ด ์ค๋จ๋์์ผ๋ฉฐ ref๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์์ผ๋ก ๋์ฒด๋์ด์ผ ํฉ๋๋ค. StrictMode๋ findDOMNode
๊ฐ ์ฌ์ฉ๋ ๋ ๊ฒฝ๊ณ ๋ฅผ ๋ณด๋
๋๋ค.
์์:
class MyComponent extends React.Component {
componentDidMount() {
// ์ฌ์ฉ ์ค๋จ๋ findDOMNode
const domNode = ReactDOM.findDOMNode(this);
console.log(domNode);
}
render() {
return <div>My Component</div>;
}
}
<React.StrictMode>
<MyComponent />
</React.StrictMode>
StrictMode๋ ref๋ฅผ ์ฌ์ฉํ์ฌ DOM ๋ ธ๋์ ์ง์ ์ ๊ทผํ ๊ฒ์ ๊ถ์ฅํ๋ ๊ฒฝ๊ณ ๋ฅผ ๋ณด๋ผ ๊ฒ์ ๋๋ค.
5. ์๊ธฐ์น ์์ ๋ณ๊ฒฝ ๊ฐ์ง
React๋ ์ปดํฌ๋ํธ ์ํ๊ฐ ๋ถ๋ณ(immutable)์ด๋ผ๋ ๊ฐ์ ์ ์์กดํฉ๋๋ค. ์ํ๋ฅผ ์ง์ ๋ณ๊ฒฝํ๋ฉด ์๊ธฐ์น ์์ ๋ ๋๋ง ๋์๊ณผ ๋ฐ์ดํฐ ๋ถ์ผ์น๋ฅผ ์ด๋ํ ์ ์์ต๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์ง์ ์ ์ธ ๋ณ๊ฒฝ์ ๋ง์ง๋ ์์ง๋ง, StrictMode๋ ํน์ ์ปดํฌ๋ํธ ํจ์, ํนํ ์์ฑ์๋ฅผ ๋ ๋ฒ ํธ์ถํจ์ผ๋ก์จ ์ ์ฌ์ ์ธ ๋ณ๊ฒฝ์ ์๋ณํ๋ ๋ฐ ๋์์ ์ค๋๋ค. ์ด๋ ์ง์ ์ ์ธ ๋ณ๊ฒฝ์ผ๋ก ์ธํ ์๋ํ์ง ์์ ๋ถ์ ํจ๊ณผ๋ฅผ ๋ ๋ช ํํ๊ฒ ๋ง๋ญ๋๋ค.
6. ์ฌ์ฉ ์ค๋จ๋ Context API ์ฌ์ฉ ํ์ธ
๊ธฐ์กด Context API์๋ ๋ช ๊ฐ์ง ๋จ์ ์ด ์์๊ณ React 16.3์ ๋์ ๋ ์๋ก์ด Context API๋ก ๋์ฒด๋์์ต๋๋ค. StrictMode๋ ์ฌ์ ํ ์ด์ API๋ฅผ ์ฌ์ฉํ๊ณ ์์ ๊ฒฝ์ฐ ๊ฒฝ๊ณ ๋ฅผ ๋ณด๋ด ๋ ๋์ ์ฑ๋ฅ๊ณผ ๊ธฐ๋ฅ์ ์ํด ์ API๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๋๋ก ๊ถ์ฅํฉ๋๋ค.
StrictMode ํ์ฑํํ๊ธฐ
StrictMode๋ฅผ ํ์ฑํํ๋ ค๋ฉด ์ํ๋ ์ปดํฌ๋ํธ ํ์ ํธ๋ฆฌ๋ฅผ <React.StrictMode>
์ปดํฌ๋ํธ๋ก ๊ฐ์ธ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
์์:
import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App';
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
<React.StrictMode>
<App />
</React.StrictMode>
);
์ด ์์์์ StrictMode๋ <App />
์ปดํฌ๋ํธ๋ฅผ ๊ฐ์ธ์ ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์
์ ๋ํด ํ์ฑํ๋ฉ๋๋ค. ๋ํ ํน์ ์ปดํฌ๋ํธ๋ง ๊ฐ์ธ์ ์ ํ๋ฆฌ์ผ์ด์
์ ํน์ ๋ถ๋ถ์๋ง StrictMode๋ฅผ ํ์ฑํํ ์๋ ์์ต๋๋ค.
StrictMode๋ ๊ฐ๋ฐ ์ ์ฉ ๋๊ตฌ๋ผ๋ ์ ์ ๊ธฐ์ตํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ ํ๋ก๋์ ๋น๋์๋ ์๋ฌด๋ฐ ์ํฅ์ ๋ฏธ์น์ง ์์ต๋๋ค.
์ค์ฉ์ ์ธ ์์์ ์ฌ์ฉ ์ฌ๋ก
StrictMode๊ฐ React ์ ํ๋ฆฌ์ผ์ด์ ์ ์ผ๋ฐ์ ์ธ ๋ฌธ์ ๋ฅผ ์๋ณํ๊ณ ๋ฐฉ์งํ๋ ๋ฐ ์ด๋ป๊ฒ ๋์์ด ๋๋์ง ๋ช ๊ฐ์ง ์ค์ฉ์ ์ธ ์์๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค:
์์ 1: ํด๋์ค ์ปดํฌ๋ํธ์์ ์์ ํ์ง ์์ ์๋ช ์ฃผ๊ธฐ ๋ฉ์๋ ์๋ณ
componentWillMount
์๋ช
์ฃผ๊ธฐ ๋ฉ์๋์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ํด๋์ค ์ปดํฌ๋ํธ๋ฅผ ์๊ฐํด ๋ณด์ธ์:
class UserProfile extends React.Component {
constructor(props) {
super(props);
this.state = {
userData: null,
};
}
componentWillMount() {
// ์ฌ์ฉ์ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ (์์ ํ์ง ์์)
fetch('/api/user')
.then(response => response.json())
.then(data => {
this.setState({ userData: data });
});
}
render() {
if (!this.state.userData) {
return <div>Loading...</div>;
}
return (
<div>
<h2>User Profile</h2>
<p>Name: {this.state.userData.name}</p>
<p>Email: {this.state.userData.email}</p>
</div>
);
}
}
<React.StrictMode>
<UserProfile />
</React.StrictMode>
StrictMode๋ ์ฝ์์ componentWillMount
๊ฐ ์์ ํ์ง ์์ ์๋ช
์ฃผ๊ธฐ ๋ฉ์๋๋ผ๋ ๊ฒฝ๊ณ ๋ฅผ ๋ณด๋ผ ๊ฒ์
๋๋ค. ๊ถ์ฅ๋๋ ํด๊ฒฐ์ฑ
์ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ ๋ก์ง์ componentDidMount
์๋ช
์ฃผ๊ธฐ ๋ฉ์๋๋ก ์ฎ๊ธฐ๊ฑฐ๋ ํจ์ํ ์ปดํฌ๋ํธ์์ useEffect
ํ
์ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค.
์์ 2: ํจ์ํ ์ปดํฌ๋ํธ์์ ๋ ๋๋ง ์ค ๋ถ์ ํจ๊ณผ ๋ฐฉ์ง
render
ํจ์ ๋ด์์ ์ ์ญ ์นด์ดํฐ๋ฅผ ์
๋ฐ์ดํธํ๋ ํจ์ํ ์ปดํฌ๋ํธ๋ฅผ ์๊ฐํด ๋ณด์ธ์:
let globalCounter = 0;
function MyComponent() {
// ๋ ๋๋ง ์ค ๋ถ์ ํจ๊ณผ (์ํฐํจํด)
globalCounter++;
return <div>Global Counter: {globalCounter}</div>;
}
<React.StrictMode>
<MyComponent />
</React.StrictMode>
StrictMode๋ MyComponent
ํจ์๋ฅผ ๋ ๋ฒ ํธ์ถํ์ฌ ๊ฐ ๋ ๋๋ง ์ globalCounter
๊ฐ ๋ ๋ฒ ์ฆ๊ฐํ๊ฒ ํฉ๋๋ค. ์ด๋ ์๊ธฐ์น ์์ ๋์๊ณผ ์์๋ ์ ์ญ ์ํ๋ก ์ด์ด์ง ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค. ํด๊ฒฐ์ฑ
์ ๋ถ์ ํจ๊ณผ(globalCounter
์ฆ๊ฐ)๋ฅผ ๋น ์์กด์ฑ ๋ฐฐ์ด์ ๊ฐ์ง useEffect
ํ
์ผ๋ก ์ฎ๊ฒจ ์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ๋ ํ ํ ๋ฒ๋ง ์คํ๋๋๋ก ํ๋ ๊ฒ์
๋๋ค.
์์ 3: ๋ ๊ฑฐ์ ๋ฌธ์์ด ref ์ฌ์ฉ
class MyInputComponent extends React.Component {
componentDidMount() {
// ๋ฌธ์์ด ref๋ฅผ ์ฌ์ฉํ์ฌ ์
๋ ฅ ์์์ ์ ๊ทผ
this.refs.myInput.focus();
}
render() {
return <input type="text" ref="myInput" />;
}
}
<React.StrictMode>
<MyInputComponent />
</React.StrictMode>
StrictMode๋ ๋ฌธ์์ด ref ์ฌ์ฉ์ ๋ํด ๊ฒฝ๊ณ ํ ๊ฒ์
๋๋ค. ๋ ๋์ ์ ๊ทผ ๋ฐฉ์์ React.createRef()
๋ ์ฝ๋ฐฑ ref๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ผ๋ก, ์ด๋ DOM ์์์ ๋ ๋ช
์์ ์ด๊ณ ์ ๋ขฐํ ์ ์๋ ์ ๊ทผ์ ์ ๊ณตํฉ๋๋ค.
์์ ํ๋ฆ์ StrictMode ํตํฉํ๊ธฐ
๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ๊ฐ๋ฐ ๊ณผ์ ์ด๊ธฐ์ StrictMode๋ฅผ ํตํฉํ๊ณ ๊ฐ๋ฐ ์ฃผ๊ธฐ ๋ด๋ด ํ์ฑํ ์ํ๋ฅผ ์ ์งํ๋ ๊ฒ์ ๋๋ค. ์ด๋ฅผ ํตํด ์ฝ๋๋ฅผ ์์ฑํ๋ฉด์ ์ ์ฌ์ ์ธ ๋ฌธ์ ๋ฅผ ํฌ์ฐฉํ ์ ์์ผ๋ฉฐ, ๋์ค์ ํ ์คํธ๋ ํ๋ก๋์ ์์ ๋ฐ๊ฒฌํ๋ ๊ฒ์ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
์์ ํ๋ฆ์ StrictMode๋ฅผ ํตํฉํ๊ธฐ ์ํ ๋ช ๊ฐ์ง ํ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ๊ฐ๋ฐ ์ค ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํด StrictMode๋ฅผ ํ์ฑํํ์ธ์. ์ด๋ ๊ฐ์ฅ ํฌ๊ด์ ์ธ ๋ฒ์๋ฅผ ์ ๊ณตํ๊ณ ๋ชจ๋ ์ปดํฌ๋ํธ๊ฐ StrictMode ๊ฒ์ฌ๋ฅผ ๋ฐ๋๋ก ๋ณด์ฅํฉ๋๋ค.
- StrictMode๊ฐ ๋ณด๋ด๋ ๊ฒฝ๊ณ ๋ฅผ ๊ฐ๋ฅํ ํ ๋นจ๋ฆฌ ํด๊ฒฐํ์ธ์. ๊ฒฝ๊ณ ๋ฅผ ๋ฌด์ํ์ง ๋ง์ธ์. ์ด๋ ์ ์ฌ์ ์ธ ๋ฌธ์ ๋ฅผ ์๋ณํ๊ณ ๋ฐฉ์งํ๋ ๋ฐ ๋์์ ์ฃผ๊ธฐ ์ํด ์กด์ฌํฉ๋๋ค.
- ์ฝ๋ ์คํ์ผ๊ณผ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๊ฐ์ ํ๊ธฐ ์ํด ์ฝ๋ ๋ฆฐํฐ์ ํฌ๋งทํฐ๋ฅผ ์ฌ์ฉํ์ธ์. ์ด๋ ์ผ๋ฐ์ ์ธ ์ค์๋ฅผ ๋ฐฉ์งํ๊ณ ์ฝ๋๋ฒ ์ด์ค ์ ์ฒด์ ์ผ๊ด์ฑ์ ๋ณด์ฅํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค. React ๊ด๋ จ ๊ท์น์ด ์๋ ESLint๋ฅผ ์ ๊ทน ๊ถ์ฅํฉ๋๋ค.
- ์ปดํฌ๋ํธ์ ๋์์ ํ์ธํ๊ธฐ ์ํด ๋จ์ ํ ์คํธ๋ฅผ ์์ฑํ์ธ์. ์ด๋ StrictMode๊ฐ ๋์น ์ ์๋ ๋ฒ๊ทธ๋ฅผ ์ก๊ณ ์ปดํฌ๋ํธ๊ฐ ์์๋๋ก ์๋ํ๋์ง ํ์ธํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค. Jest์ Mocha๋ React๋ฅผ ์ํ ์ธ๊ธฐ ์๋ ํ ์คํ ํ๋ ์์ํฌ์ ๋๋ค.
- ์ ๊ธฐ์ ์ผ๋ก ์ฝ๋๋ฅผ ๊ฒํ ํ๊ณ ์ ์ฌ์ ์ธ ๊ฐ์ ์ ์ ์ฐพ์ผ์ธ์. ์ฝ๋๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ๋๋ผ๋ ๋ฆฌํฉํ ๋งํ์ฌ ๋ ์ ์ง๋ณด์ํ๊ธฐ ์ฝ๊ณ ์ฑ๋ฅ์ด ์ข๊ฒ ๋ง๋ค ๊ธฐํ๊ฐ ์์ ์ ์์ต๋๋ค.
StrictMode์ ์ฑ๋ฅ
StrictMode๋ ์ถ๊ฐ์ ์ธ ๊ฒ์ฌ์ ๊ฒฝ๊ณ ๋ฅผ ๋์ ํ์ง๋ง, ํ๋ก๋์ ํ๊ฒฝ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ํฐ ์ํฅ์ ๋ฏธ์น์ง ์์ต๋๋ค. ๊ฒ์ฌ๋ ๊ฐ๋ฐ ์ค์๋ง ์ํ๋๋ฉฐ ํ๋ก๋์ ๋น๋์์๋ ๋นํ์ฑํ๋ฉ๋๋ค.
์ฌ์ค, StrictMode๋ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์๋ณํ๊ณ ๋ฐฉ์งํ๋ ๋ฐ ๋์์ ์ค์ผ๋ก์จ ๊ฐ์ ์ ์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋ ๋๋ง ์ค ๋ถ์ ํจ๊ณผ๋ฅผ ๊ถ์ฅํ์ง ์์์ผ๋ก์จ StrictMode๋ ๋ถํ์ํ ์ฌ๋ ๋๋ง์ ๋ฐฉ์งํ๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๋ฐ์ ์ธ ๋ฐ์์ฑ์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
StrictMode์ ์๋ํํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
StrictMode๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉํ๋ ์๋ํํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ ์ฌ์ ์ธ ๋ฌธ์ ๋ฅผ ์๋ณํ๋ ๋ฐ๋ ๋์์ด ๋ ์ ์์ต๋๋ค. ๋ง์ฝ ์๋ํํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์์ ํ์ง ์์ ์๋ช ์ฃผ๊ธฐ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ๋ ๋๋ง ์ค์ ๋ถ์ ํจ๊ณผ๋ฅผ ์ํํ๋ฉด, StrictMode๋ ๊ฒฝ๊ณ ๋ฅผ ๋ณด๋ด ๋ฌธ์ ๋ฅผ ์กฐ์ฌํ๊ณ ์ ์ฌ์ ์ผ๋ก ๋ ๋์ ๋์์ ์ฐพ์ ์ ์๊ฒ ํด์ค๋๋ค.
์๋ํํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ฌธ์ ๋ฅผ ์ง์ ์์ ํ ์๋ ์์ ์๋ ์๋ค๋ ์ ์ ์ ์ํด์ผ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ข ์ข ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ปดํฌ๋ํธ๋ฅผ ์์ ์ ์ปดํฌ๋ํธ๋ก ๊ฐ์ธ๊ณ ์์ฒด์ ์ธ ์์ ์ด๋ ์ต์ ํ๋ฅผ ์ ์ฉํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค.
๊ฒฐ๋ก
React StrictMode๋ ๊ฒฌ๊ณ ํ๊ณ , ์ ์ง๋ณด์ ๊ฐ๋ฅํ๋ฉฐ, ์ฑ๋ฅ์ด ์ข์ React ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๊ธฐ ์ํ ๊ท์คํ ๋๊ตฌ์ ๋๋ค. ๊ฐ๋ฐ ์ค์ ์ถ๊ฐ์ ์ธ ๊ฒ์ฌ์ ๊ฒฝ๊ณ ๋ฅผ ํ์ฑํํจ์ผ๋ก์จ StrictMode๋ ์ ์ฌ์ ์ธ ๋ฌธ์ ๋ฅผ ์กฐ๊ธฐ์ ์๋ณํ๊ณ , ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๊ฐ์ ํ๋ฉฐ, ์ฝ๋์ ์ ๋ฐ์ ์ธ ํ์ง์ ํฅ์์ํค๋ ๋ฐ ๋์์ ์ค๋๋ค. ๊ฐ๋ฐ ์ค์ ์ฝ๊ฐ์ ์ค๋ฒํค๋๋ฅผ ์ถ๊ฐํ์ง๋ง, StrictMode ์ฌ์ฉ์ ์ด์ ์ ๋น์ฉ์ ํจ์ฌ ๋ฅ๊ฐํฉ๋๋ค.
๊ฐ๋ฐ ์ํฌํ๋ก์ฐ์ StrictMode๋ฅผ ํตํฉํจ์ผ๋ก์จ ํ๋ก๋์ ํ๊ฒฝ์์ ์๊ธฐ์น ์์ ๋์์ ๋ง์ฃผํ ์ํ์ ํฌ๊ฒ ์ค์ด๊ณ React ์ ํ๋ฆฌ์ผ์ด์ ์ด ๊ฒฌ๊ณ ํ ๊ธฐ๋ฐ ์์ ๊ตฌ์ถ๋๋๋ก ๋ณด์ฅํ ์ ์์ต๋๋ค. StrictMode๋ฅผ ๋ฐ์๋ค์ด๊ณ ์ ์ธ๊ณ ์ฌ์ฉ์๋ฅผ ์ํด ๋ ๋์ React ๊ฒฝํ์ ๋ง๋์ธ์.
์ด ๊ฐ์ด๋๋ React StrictMode์ ๊ทธ๊ฒ์ด ๊ฐ๋ฐ ํ๊ฒฝ์ ๋ฏธ์น๋ ์ํฅ์ ๋ํ ํฌ๊ด์ ์ธ ๊ฐ์๋ฅผ ์ ๊ณตํฉ๋๋ค. StrictMode๊ฐ ์ ๊ณตํ๋ ๊ฒ์ฌ์ ๊ฒฝ๊ณ ๋ฅผ ์ดํดํจ์ผ๋ก์จ ์ ์ฌ์ ์ธ ๋ฌธ์ ๋ฅผ ์ฌ์ ์ ํด๊ฒฐํ๊ณ ๋ ๋์ ํ์ง์ React ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค. ๊ฐ๋ฐ ์ค์ StrictMode๋ฅผ ํ์ฑํํ๊ณ , ๊ทธ๊ฒ์ด ์์ฑํ๋ ๊ฒฝ๊ณ ๋ฅผ ํด๊ฒฐํ๋ฉฐ, ์ฝ๋์ ํ์ง๊ณผ ์ ์ง๋ณด์์ฑ์ ์ง์์ ์ผ๋ก ๊ฐ์ ํ๊ธฐ ์ํด ๋ ธ๋ ฅํ๋ ๊ฒ์ ๊ธฐ์ตํ์ธ์.